package com.ruoyi.web.vo;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.util.List;

/**
 * @Description 不同空间环境-入参
 * @Author liuhl
 * @Date 2024/4/23
 **/
@Data
@ApiModel(value = "DifferentSpaceVo", description = "不同空间环境-入参")
public class DifferentSpaceVo {

    // TODO 增加参数校验
    @NotBlank(message = "太阳活动分级阈值范围不能为空")
    @ApiModelProperty("太阳活动分级阈值范围，格式：a,b 最小,最大")
    private String solarRange;

    @NotBlank(message = "地磁活动分级阈值范围不能为空")
    @ApiModelProperty("地磁活动分级阈值范围，格式：a,b 最小,最大")
    private String magRange;


    @NotBlank(message = "评估年份 不能为空")
    @ApiModelProperty("评估年份 yyyy")
    private String year;

    @NotBlank(message = "太阳活动水平不能为空")
    @ApiModelProperty("太阳活动水平，包括(太阳活动低年：low_solar_activity, 太阳活动中年：mid_solar_activity, 太阳活动高年：high_solar_activity)")
    private String solarLevel;

    @NotBlank(message = "地磁活动水平不能为空")
    @ApiModelProperty("地磁活动水平，包括(地磁平静期：period_of_quiet_magnetic_storm_time, 弱磁暴期：period_of_weak_magnetic_storm_time, 强磁暴期：periods_of_severe_magnetic_storms_time)")
    private String magLevel;

    @NotBlank(message = "评估时间不能为空")
    @ApiModelProperty("评估时间 例如：2016-05-08")
    private String assessTime;

    @NotBlank(message = "高度不能为空")
    @ApiModelProperty("高度，格式如：400,500，代表起始高度400，结束高度500")
    private String altitude;

    @NotBlank(message = "卫星集合不能为空")
    @ApiModelProperty("范围及卫星集合，格式如：0~400:SWDATA_OBS_DEN_GRACEA,401~700:SWDATA_OBS_DEN_GRACEB")
    private String satellite;

    @NotEmpty(message = "模型不能为空") // 确保列表不为null且至少有一个元素
    @Valid // 开启嵌套校验
    @ApiModelProperty("模型数组")
    private List<String> model;

    @NotBlank(message = "时间分辨率不能为空")
    @ApiModelProperty("时间分辨率")
    private String interval;

    @NotBlank(message = "通讯ID不能为空")
    @ApiModelProperty("通讯ID,计算评估需要推送进度")
    private String sseId;



    public static String getMagLevelName(String code){
        String result = "";
        switch (code){
            case "period_of_quiet_magnetic_storm_time":
                result = "地磁平静期";
                break;
            case "period_of_weak_magnetic_storm_time":
                result = "弱磁暴期";
                break;
            case "periods_of_severe_magnetic_storms_time":
                result = "强磁暴期";
                break;
        }
        return result;
    }

    public static String getSolarLevelName(String code){
        String result = "";
        switch (code){
            case "low_solar_activity":
                result = "太阳活动低";
                break;
            case "mid_solar_activity":
                result = "太阳活动中";
                break;
            case "high_solar_activity":
                result = "太阳活动高";
                break;
        }
        return result;
    }

    public static String translateErrorType(String typeCode){
        String typeName = "";
        switch (typeCode){
            case "average_absolute_error":
                typeName = "评估指标为平均绝对误差时, 最优模型为 ";
                break;
            case "average_relative_error":
                typeName = "评估指标为平均相对误差时，最优模型为 ";
                break;
            case "average_root_mean_square_error":
                typeName = "评估指标为均方根误差时，最优模型为 ";
                break;
            case "average_corrCoee":
                typeName = "评估指标为相关系数时，最优模型为 ";
                break;
        }
        return typeName;
    }

}
